Skip to content

Getting Started

Setting up a Kotlin Multiplatform Project

First, you should set up a Kotlin multiplatform project. For more information, please visit Kotlin's official documentation.

Install View

See the installation page for more information.

Build your UI

You can build your UI using DSL or from a serialized format such as JSON.

Using DSL

// import views
import view.core.views.layouts.Layout
import view.core.views.layouts.LinearLayout
import view.core.views.display.TextView

// import DSL
import view.core.loaders.builders.dsl.layouts.linearLayout
import view.core.loaders.builders.dsl.layouts.linearLayout.children
import view.core.loaders.builders.dsl.textView
import view.core.loaders.builders.dsl.button


// display counter on screen

var counter = 0

fun buildUI(): Layout {
    val layout = linearLayout {
        direction = LinearLayout.Direction.HORIZONTAL
        children[
                textView {
                    id = "counter_display"
                    text = "Counter: $counter"
                },

                button {
                    id = "increment_button"
                    text = "Press to increment"
                }
        ]
    }

    layout.find("increment_button").onClickListener = {
        counter++
        val textView = layout.find("counter_display") as TextView
        textView.text = "Counter: $counter"
    }

    return layout
}

Using JSON

// import views
import view.core.views.layouts.Layout
import view.core.views.display.TextView

// import view loader
import view.core.loaders.viewTree.treeLoaders.JsonTreeLoader


// display counter on screen

var counter = 0

fun buildUI(): Layout {
    val jsonString = """
        {
            "type": "linear_layout",
            "direction": "horizontal",
            "children": [
                {
                    "type": "text_view",
                    "id" = "counter_display",
                    "text" = "Counter: 0"
                },

                {
                    "type": "button",
                    "id" = "increment_button",
                    "text" = "Press to increment"
                }
            ]
        }
    """.trimIndent()

    val loader = JsonTreeLoader(jsonString)
    val layout = loader.loadViewTree()

    layout.find("increment_button").onClickListener = {
        counter++
        val textView = layout.find("counter_display") as TextView
        textView.text = "Counter: $counter"
    }

    return layout
}


Render your views on specific platforms

This example will show how to use the MaterialDesignJsViewRenderer which renders views on the web.

Please refer to each renderer's documentation on how to render views.

// import the renderer
import view.core.renderers.MaterialDesignJsRenderer

// contains the renderer's dependency injection configuration
import view.di.Container

// contains the core library's DI configuration
import view.di.KodeinContainer


fun displayUI() {
    // add the renderer's DI config to the library's DI config
    // Note that this should be done before using the library
    KodeinContainer.addConfig(Container.kodein, allowOverrides = true)

    // render the layout
    val layout = buildUI()
    MaterialDesignJsRenderer.setRoot(layout)
}